namespace eval ::NcParts {
    namespace export capRotatePart
    namespace export NcPartEnabler
    RegisterAction "NC Parts" "::NcParts::NcPartEnabler" " " "::NcParts::NcPart" "Schematic"
}
proc ::NcParts::NcPartEnabler  {} {
    set NcEnable 0
    set lSelObjs [GetSelectedObjects]
    set lObjType [DboBaseObject_GetObjectType $lSelObjs]
    if { ($lObjType == $::DboBaseObject_PLACED_INSTANCE) && ([llength $lSelObjs] == 1)} {
        
        set NcEnable 1
    }
    return $NcEnable
}

proc ::NcParts::NcPart  {} {
    set lSelObjs1 [GetSelectedObjects]
    # 从选中对象列表中取出第一个对象
    set lObj1 [lindex $lSelObjs1 0]
    # 创建一个 C 字符串，代表属性名称 "BOM_IGNORE"
    set BomNameCStr [DboTclHelper_sMakeCString "BOM_IGNORE"]
    # 创建一个 C 字符串，代表属性值 "TRUE"
    set BomValueCStr [DboTclHelper_sMakeCString "TRUE"]
    # 为对象设置有效的属性字符串值
    set lStatus1 [$lObj1 SetEffectivePropStringValue $BomNameCStr $BomValueCStr]

    # 创建一个 C 字符串，代表属性名称 "NC_STATUS"
    set NcNameCStr [DboTclHelper_sMakeCString "NC_STATUS"]
    # 创建一个 C 字符串，代表属性值 "NC"
    set NcValueCStr [DboTclHelper_sMakeCString "NC"]
    # 为对象设置有效的属性字符串值
    set lStatus [$lObj1 SetEffectivePropStringValue $NcNameCStr $NcValueCStr]    

    # 定义一个空对象，用于后续比较
    set varNullObj NULL
    # 获取对象的显示属性
    set pDispProp [$lObj1 GetDisplayProp $NcNameCStr $lStatus]
    # 获取当前的数据库状态
    set lStatus [DboState]

    # 检查获取的显示属性是否为空对象
    if { $pDispProp == $varNullObj } {
        # 设置旋转角度为 0
        set rotation 0
        # 创建一个 LOGFONT 对象
        set logfont [DboTclHelper_sMakeLOGFONT]
        # 设置颜色为默认对象颜色
        set color $::DboValue_DEFAULT_OBJECT_COLOR
        set lX 0
        set lY 0
        set displocation [DboTclHelper_sMakeCPoint $lX $lY]
        # 创建一个新的显示属性
        set pNewDispProp [$lObj1 NewDisplayProp $lStatus $NcNameCStr $displocation $rotation $logfont $color]
        # 设置显示类型为同时显示属性名称和属性值
        $pNewDispProp SetDisplayType $::DboValue_VALUE_ONLY
    } else {
        # 如果显示属性不为空对象，设置显示类型为只显示属性名称
        $pDispProp SetDisplayType $::DboValue_VALUE_ONLY
    }  

    set CStatus [$lObj1 SetColor 8]
}